{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# numpy 用于快速计算任何维度的数组\n",
    "\n",
    "# 支持常见的数组和矩阵操作\n",
    "\n",
    "# 使用ndarray对象来处理多维数组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "score=np.array(\n",
    "[[80, 89, 86, 67, 79],\n",
    "       [78, 97, 89, 67, 81],\n",
    "       [90, 94, 78, 67, 74],\n",
    "       [91, 91, 90, 67, 69],\n",
    "       [76, 87, 75, 67, 86],\n",
    "       [70, 79, 84, 67, 84],\n",
    "       [94, 92, 93, 67, 64],\n",
    "       [86, 85, 83, 67, 80]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[80, 89, 86, 67, 79],\n",
       "       [78, 97, 89, 67, 81],\n",
       "       [90, 94, 78, 67, 74],\n",
       "       [91, 91, 90, 67, 69],\n",
       "       [76, 87, 75, 67, 86],\n",
       "       [70, 79, 84, 67, 84],\n",
       "       [94, 92, 93, 67, 64],\n",
       "       [86, 85, 83, 67, 80]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[80, 89, 86, 67, 79],\n",
       "       [78, 97, 89, 67, 81],\n",
       "       [90, 94, 78, 67, 74],\n",
       "       [91, 91, 90, 67, 69],\n",
       "       [76, 87, 75, 67, 86],\n",
       "       [70, 79, 84, 67, 84],\n",
       "       [94, 92, 93, 67, 64],\n",
       "       [86, 85, 83, 67, 80]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ndarray和python 原生list效率高\n",
    "# 大量计算的时候,ndarray有非常大的优势\n",
    "# 1是因为数组连续空间,可以快速寻址,\n",
    "# 2是因为支持并行化运算\n",
    "# 3是因为底层用c实现,内部解除了GIL(全局解释器锁)\n",
    "score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 358 ms\n",
      "Wall time: 114 ms\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "import time \n",
    "a=[]\n",
    "for i in range(100000000):\n",
    "    a.append(random.random())\n",
    "    pass\n",
    "%time sum1= sum(a)\n",
    "\n",
    "b=np.array(a)\n",
    "\n",
    "%time sum2=np.sum(b)\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8, 5)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"\"\"\n",
    "属性名字\t属性解释\n",
    "ndarray.shape\t数组维度的元组\n",
    "ndarray.ndim\t数组维数\n",
    "ndarray.size\t数组中的元素数量\n",
    "ndarray.itemsize\t一个数组元素的长度（字节）\n",
    "ndarray.dtype\t数组元素的类型\n",
    "\"\"\"\n",
    "# score\n",
    "score.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score.ndim "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score.size\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "score.itemsize\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "score.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.dtype"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(score.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float32')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a=np.array([[1,2,3],[4,5,6]],dtype=np.float32)\n",
    "a.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([b'python', b'tensorflow', b'scikit-learn', b'numpy'], dtype='|S12')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr=np.array(['python', 'tensorflow', 'scikit-learn', 'numpy'],dtype=np.string_)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1, 1, 1, 1, 1, 1, 1],\n",
       "       [1, 1, 1, 1, 1, 1, 1, 1],\n",
       "       [1, 1, 1, 1, 1, 1, 1, 1],\n",
       "       [1, 1, 1, 1, 1, 1, 1, 1]], dtype=int64)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成0 或者1的数组 4行8列\n",
    "ones=np.ones([4,8],dtype=np.int64)\n",
    "ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0],\n",
       "       [0, 0, 0, 0]], dtype=int64)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "zeros=np.zeros([8,4],dtype=np.int64)\n",
    "zeros"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "\n",
    "# 从现有数组中生成\n",
    "a=np.array([[1,2,3],[4,5,6]],dtype=np.int64)\n",
    "# 深拷贝\n",
    "a1=np.array(a)\n",
    "a1==a\n",
    "# 浅拷贝\n",
    "a2=np.asarray(a)\n",
    "a[0,0]=100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]], dtype=int64)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[100,   2,   3],\n",
       "       [  4,   5,   6]], dtype=int64)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  0,  10,  20,  30,  40,  50,  60,  70,  80,  90, 100], dtype=int64)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成固定范围的数组 \n",
    "\n",
    "arr=np.linspace(0,100,num=11,endpoint=True,dtype=np.int64)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int64')"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "arr.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,\n",
       "       44, 46, 48])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建等差数列\n",
    "arr=np.arange(10,50,2)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 10,  31, 100], dtype=int64)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建等比数列 在10 ^ start 到10 ^ stop中创建num个等比数列\n",
    "arr=np.logspace(1,2,num=3,dtype=np.int64)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.82070179, 0.57656801, 3.66907115, ..., 2.8376711 , 3.71135777,\n",
       "       0.61986359])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# np.random模块\n",
    "# 生成均值为1.75，标准差为1的正态分布数据，100000000个\n",
    "x1=np.random.normal(loc=1.75,scale=1,size=100000000)\n",
    "x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1.size\n",
    "x1.shape\n",
    "x1.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "from pylab import mpl\n",
    "\n",
    "# 设置显示中文字体\n",
    "mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "# 设置正常显示符号\n",
    "mpl.rcParams[\"axes.unicode_minus\"] = False\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 2000x800 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(20, 8), dpi=100)\n",
    "plt.hist(x1,1000)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.56119376,  1.16651933, -1.23810112, -2.02432732,  0.88847122],\n",
       "       [-0.55140416,  0.18956479,  0.5436179 ,  0.51404197, -0.71175158],\n",
       "       [ 0.97234909, -0.4265607 ,  0.66107768, -0.43901669, -0.57384002],\n",
       "       [ 0.87807324,  0.29429634,  0.80644894, -0.11302098,  0.92028417]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 举例2：随机生成4支股票1周的交易日涨幅数据\n",
    "# 4支股票，一周(5天)的涨跌幅数据，如何获取？\n",
    "# \n",
    "# 随机生成涨跌幅在某个正态分布内，比如均值0，方差1\n",
    "\n",
    "stock_change =np.random.normal(loc=0,scale=1,size=(4,5))\n",
    "stock_change"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.93785448, 1.73035298, 2.1069784 , 4.39813637, 1.22830394])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 均匀分布\n",
    "x2=np.random.uniform(low=1,high=5,size=5)\n",
    "x2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4.59886058, 4.64662159, 4.318617  , 2.90793983, 3.72366371],\n",
       "       [2.82162983, 2.38900235, 1.81743755, 2.24532048, 3.05836709],\n",
       "       [4.6492424 , 4.79303369, 1.23952701, 3.75850316, 3.0901945 ],\n",
       "       [1.80312841, 4.63228403, 3.93813865, 1.68637335, 3.36218107]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 做了一个软件炒股\n",
    "x3=np.random.uniform(low=1,high=5,size=(4,5))\n",
    "x3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[3, 3, 2, 3, 2, 4],\n",
       "       [4, 2, 1, 2, 2, 3],\n",
       "       [4, 4, 2, 4, 2, 3],\n",
       "       [1, 4, 4, 1, 3, 1],\n",
       "       [3, 2, 1, 4, 2, 4]], dtype=int64)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x4=np.random.randint(low=1,high=5,size=(5,6),dtype=np.int64)\n",
    "x4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.05610827,  0.70172148, -0.44430565, ..., -0.13061109,\n",
       "       -0.71926903, -0.87255659])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成均匀分布的随机数\n",
    "x2 = np.random.uniform(-1, 1, 100000000)\n",
    "\n",
    "x2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
